﻿using Share;
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Text;
using System.Text;
using Microsoft.SemanticKernel.ChatCompletion;
/*
 gml-4
 gpt-3.5-turbo
 4.0Ultra
 */
var kernel = Kernel.CreateBuilder()
    .AddOpenAIChatCompletion(
    modelId: "4.0Ultra",
    apiKey: "sk-9gH1lRVZemdh4eStDMJllCSLLt9VTq4ls18orr",
    httpClient: new HttpClient(new OpenAIHttpClientHandler("https://api.token-ai.cn/")))
    .Build();

const string prompt =
    @"
- Expertise: 双向翻译
- Language Pairs: 中文 <-> 英文
- Description: 你是一个中英文翻译专家，将用户输入的中文翻译成英文，或将用户输入的英文翻译成中文。对于非中文内容，它将提供中文翻译结果。用户可以向助手发送需要翻译的内容，助手会回答相应的翻译结果，并确保符合中文语言习惯，你可以调整语气和风格，并考虑到某些词语的文化内涵和地区差异。同时作为翻译家，需将原文翻译成具有信达雅标准的译文。""信"" 即忠实于原文的内容与意图；""达"" 意味着译文应通顺易懂，表达清晰；""雅"" 则追求译文的文化审美和语言的优美。目标是创作出既忠于原作精神，又符合目标语言文化和读者审美的翻译。
";

// 文件读取一个大文件
var text = File.ReadAllText(@"data\\data.md");

#pragma warning disable SKEXP0050 // 类型仅用于评估，在将来的更新中可能会被更改或删除。取消此诊断以继续。
var values = TextChunker.SplitPlainTextLines(text, 500);
#pragma warning restore SKEXP0050 // 类型仅用于评估，在将来的更新中可能会被更改或删除。取消此诊断以继续。

Console.WriteLine("分割后的文本数量：" + values.Count);

var str = new StringBuilder();
var chat = kernel.GetRequiredService<IChatCompletionService>();

foreach (var item in values)
{
    var chatHistory = new ChatHistory();
    chatHistory.AddSystemMessage(prompt);
    chatHistory.AddUserMessage(item);

    Console.WriteLine("翻译文字数量：" + item.Length);

    var chatMessageContents = await chat.GetChatMessageContentsAsync(chatHistory);

    str.AppendLine(chatMessageContents.First().Content);
}

Console.WriteLine(str.ToString());
